package com.eascs.admin.item.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.eascs.admin.item.dao.O2oPubDdItemDao;
import com.eascs.admin.item.entity.O2oPubDatadictionaryEntity;
import com.eascs.admin.item.entity.O2oPubDditemEntity;
import com.eascs.admin.item.vo.O2oPubDdItemVo;
import com.eascs.app.dao.PageResult;
import com.eascs.app.dao.SqlPageQuery;
import com.eascs.common.util.StringUtil;

/**
 * @ClassName: O2oPubDdItemService.java
 * @Description: <p> 数据字典Service </p>
 * @author CXW
 * @date 2016年9月23日 上午11:00:32
 * @version V1.0
 */
@Service
public class O2oPubDdItemService {

	@Autowired
	O2oPubDdItemDao ddItemDao;
	
	/**
	 * @Description: <p> 分页查询数据字典主表数据 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:38:08
	 * @version V1.0
	 * @param 
	 * @return PageResult<Object[]>
	 */
	public PageResult<Object[]> findPubDatadictionaryByPage(O2oPubDdItemVo vo) {
		SqlPageQuery<Object[]> sqlPageQuery = new SqlPageQuery<>(Object[].class, vo.getPageSize(), vo.getPageIndex());
		StringBuffer querySql = new StringBuffer();
		querySql.append(" select pdo.dd_no,pdo.dd_code,pdo.dd_name,pdo.dd_desc ");
		querySql.append(",(case when pdo.is_lock='N' then '未锁定' when  pdo.is_lock='Y' then '锁定' end) as is_lock ");
		querySql.append(" from pub_datadictionary_o2o pdo where 1=1 ");
		if (!StringUtil.isEmpty(vo.getItemCode())) {
			querySql.append(" and pdo.dd_code like ? ");
			sqlPageQuery.addLikeParam(vo.getItemCode());
		}
		if (!StringUtil.isEmpty(vo.getItemName())) {
			querySql.append(" and pdo.dd_name like ? ");
			sqlPageQuery.addLikeParam(vo.getItemName());
		}
		querySql.append(" order by pdo.dd_code asc ");
		sqlPageQuery.setQuerySql(querySql.toString());
		return ddItemDao.findDataWithPage(sqlPageQuery);
	}
	
	/**
	 * @Description: <p> 分页查询数据字典分表数据 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:38:40
	 * @version V1.0
	 * @param 
	 * @return PageResult<Object[]>
	 */
	public PageResult<Object[]> findPubDdItemByPage(O2oPubDdItemVo vo){
		SqlPageQuery<Object[]> sqlPageQuery = new SqlPageQuery<>(Object[].class, vo.getPageSize(), vo.getPageIndex());
		StringBuffer querySql = new StringBuffer();
		querySql.append(" select pdo.item_no,pdo.item_code,pdo.item_name,pdo.item_order,pdo.itemdesc ");
		querySql.append(" ,(case when pdo.is_lock='N' then '未锁定' when  pdo.is_lock='Y' then '锁定' end) as is_lock ");
		querySql.append(" from pub_dditem_o2o pdo where 1=1 ");
		if (!StringUtil.isEmpty(vo.getDdNo())) {
			querySql.append(" and pdo.dd_no = ? ");
			sqlPageQuery.addParam(vo.getDdNo());
		}
		querySql.append(" order by pdo.item_order asc");
		sqlPageQuery.setQuerySql(querySql.toString());
		return ddItemDao.findDataWithPage(sqlPageQuery);
	}
	
	/**
	 * @Description: <p> 向表 pub_dditem_o2o 中插入数据字典</p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:30:46
	 * @version V1.0
	 * @param dditemEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int savePubDdItem(O2oPubDditemEntity dditemEntity){
		return ddItemDao.insert(dditemEntity);
	}
	
	/**
	 * @Description: <p> 向表 pub_datadictionary_o2o 中插入数据字典</p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:30:46
	 * @version V1.0
	 * @param datadictionaryEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int savePubDatadictionary(O2oPubDatadictionaryEntity datadictionaryEntity){
		return ddItemDao.insert(datadictionaryEntity);
	}
	
	/**
	 * @Description: <p> 更新表 pub_dditem_o2o 中的数据字典 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:33:04
	 * @version V1.0
	 * @param dditemEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int updatePubDdItemById(O2oPubDditemEntity dditemEntity){
		return ddItemDao.updateById(dditemEntity);
	}
	
	/**
	 * @Description: <p> 更新表 pub_datadictionary_o2o 中的数据字典 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:33:04
	 * @version V1.0
	 * @param datadictionaryEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int updatePubDatadictionaryById(O2oPubDatadictionaryEntity datadictionaryEntity){
		return ddItemDao.updateById(datadictionaryEntity);
	}
	
	/**
	 * @Description: <p> 根据ddNo查询数据字典 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:36:26
	 * @version V1.0
	 * @param ddNo
	 * @return O2oPubDatadictionaryEntity
	 */
	public O2oPubDatadictionaryEntity findPubDatadictionaryById(String ddNo){
		return ddItemDao.getById(O2oPubDatadictionaryEntity.class, ddNo);
	}
	
	/**
	 * @Description: <p> 根据code查询数据字典 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:36:26
	 * @version V1.0
	 * @param code
	 * @return O2oPubDatadictionaryEntity
	 */
	public O2oPubDatadictionaryEntity findPubDatadictionaryByCode(String code){
		String sql = "select * from pub_datadictionary_o2o where dd_code = ?";
		return ddItemDao.findEntity(sql, O2oPubDatadictionaryEntity.class, code);
	}
	

	/**
	 * @Title: findPubdditemNameByCode
	 * @Description: 查询字典选项名称
	 * @author 张庆奇
	 * @param code 字典code
	 * @param itemcode 字典选项code
	 * @return
	 * @return String
	 * @throws
	 * @date 2017年3月24日 上午9:54:43
	 */
	public String findPubdditemNameByCode(String code,String itemcode){
		String sql = "SELECT item.item_name FROM pub_datadictionary dic LEFT JOIN pub_dditem item ON dic.dd_no = item.dd_no WHERE dd_code = ? AND item_code = ? AND item.is_lock = 'N' AND dic.is_lock = 'N'";
		return ddItemDao.findString(sql, code,itemcode);
	}
	
	public String findPubdditemO2ONameByCode(String code,String itemcode){
		String sql = "SELECT item.item_name FROM pub_datadictionary_o2o dic LEFT JOIN pub_dditem_o2o item ON dic.dd_no = item.dd_no WHERE dd_code = ? AND item_code =? AND item.is_lock = 'N' AND dic.is_lock = 'N'";
		return ddItemDao.findString(sql, code,itemcode);
	}
	/**
	 * 查询字典选项名称
	 * @param code
	 * @param itemcode
	 * @return
	 */
	public String findPubdditemNameByCodeisall(String code,String itemcode){
		String sql = "SELECT item.item_name FROM pub_datadictionary dic LEFT JOIN pub_dditem item ON dic.dd_no = item.dd_no WHERE dd_code = ? AND item_code = ? ";
		return ddItemDao.findString(sql, code,itemcode);
	}
	public String findPubdditemO2ONameByCodeall(String code,String itemcode){
		String sql = "SELECT item.item_name FROM pub_datadictionary_o2o dic LEFT JOIN pub_dditem_o2o item ON dic.dd_no = item.dd_no WHERE dd_code = ? AND item_code =? ";
		return ddItemDao.findString(sql, code,itemcode);
	}
	/**
	 * @Description: <p> 根据ddNo查询数据字典 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:36:26
	 * @version V1.0
	 * @param itemNo
	 * @return O2oPubDditemEntity
	 */
	public O2oPubDditemEntity findPubDdItemById(String itemNo){
		return ddItemDao.getById(O2oPubDditemEntity.class, itemNo);
	}
	
	/**
	 * @Description: <p> 根据code查询数据字典 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午1:36:26
	 * @version V1.0
	 * @param code
	 * @return O2oPubDditemEntity
	 */
	public O2oPubDditemEntity findPubDdItemByCode(String code, String ddNo){
		String sql = "select * from pub_dditem_o2o where item_code = ? and dd_no = ? ";
		return ddItemDao.findEntity(sql, O2oPubDditemEntity.class, code, ddNo);
	}
	
	/**
	 * @Description: <p> 启用数据字典或数据字典常量 </p>
	 * @author CXW
	 * @date 2016年9月23日 下午3:39:09
	 * @version V1.0
	 * @param ddNo,sql
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int startAndStop(String sql, String ddNo){
		return ddItemDao.execute(sql, ddNo);
	}
	/**
	 * code 查询所有不锁定的item
	 * @param code
	 * @return
	 */
	public List<O2oPubDditemEntity> findPubDdItemByCodeAll(String code){
		String sql="SELECT d.* from pub_datadictionary_o2o p,pub_dditem_o2o d where p.dd_no=d.dd_no and p.dd_code=? and p.is_lock='N' and d.is_lock='N'";
		return ddItemDao.findEntitys(sql, O2oPubDditemEntity.class, code);
	}
	
}
